package com.sample.FinalProject;

import java.util.ArrayList;
import java.util.Random;

import android.graphics.Color;
import android.util.Log;

public class Square extends Shape {
public Square(int newX, int newY, int aColor, boolean isAElite){
maintain=0;	
x=newX;
y=newY;
mockX=x;
mockY=y;
color=aColor;
if (color==Color.GREEN || color==Color.BLUE){
isEnemy=false;	
}
else{
isEnemy=true;	
}
age=0;
if (isAElite==true){
isElite=true;
length=25;	
max_health=300;
health=max_health/2;
speed=2;
damage=16;
}
else{
isElite=false;	
length=20;
max_health=50;
health=max_health/2;
speed=1;
damage=4;
}
}
public Square think(Square r, int order, FinalView fv){
	Square returnSquare=r;
	boolean hasMoved=false;
	ArrayList <Building> buildings= fv.getBuilding();
	ArrayList <Turret> towers=fv.getTowers();
	ArrayList <Square> squares=fv.getSquares();
	ArrayList <Circle> CircleUnits=fv.getCircleUnits();	
	MainShape main=fv.getMain();
	Random ran=new Random();
if(isEnemy==false){	
if (order==1){	
	if (hasMoved==false){
	for (int z = 0; z<squares.size(); z++){
		if (hasMoved==false && squares.get(z).isEnemy==true && Math.abs(squares.get(z).getX()-x)<=150 && Math.abs(squares.get(z).getY()-y)<=150){
			returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
			hasMoved=true;
			}		
		}}
	if (hasMoved==false){
	for (int z = 0; z<CircleUnits.size(); z++){
		if (hasMoved==false && CircleUnits.get(z).isEnemy==true && Math.abs(CircleUnits.get(z).getX()-x)<=150 && Math.abs(CircleUnits.get(z).getY()-y)<=150){
			returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
			hasMoved=true;
			}		
	}}
	if (hasMoved==false){
		for (int z = 0; z<towers.size(); z++){
			if (hasMoved==false && towers.get(z).isEnemy==true && Math.abs(towers.get(z).getX()-x)<=150 && Math.abs(towers.get(z).getY()-y)<=150){
				returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
				hasMoved=true;
				}	
		}}
	if (hasMoved==false){
		for (int z = 0; z<buildings.size(); z++){
			if (hasMoved==false && buildings.get(z).isEnemy==true && Math.abs(buildings.get(z).getX()-x)<=150 && Math.abs(buildings.get(z).getY()-y)<=150){
			returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
			hasMoved=true;
			}
			}
		}
	if (hasMoved==false){	
returnSquare.mockMove(0,0);
	}
}
else if (order==2){
	if (hasMoved==false){
		for (int z = 0; z<squares.size(); z++){
			if (hasMoved==false && squares.get(z).isEnemy==true && Math.abs(squares.get(z).getX()-x)<=50 && Math.abs(squares.get(z).getY()-y)<=50){
				returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
				hasMoved=true;
				}		
			}}
	if (hasMoved==false){
		for (int z = 0; z<CircleUnits.size(); z++){
			if (hasMoved==false && CircleUnits.get(z).isEnemy==true && Math.abs(CircleUnits.get(z).getX()-x)<=50 && Math.abs(CircleUnits.get(z).getY()-y)<=50){
				returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
				hasMoved=true;
				}		
		}}
		if (hasMoved==false){
		for (int z = 0; z<towers.size(); z++){
			if (hasMoved==false && towers.get(z).isEnemy==false && Math.abs(towers.get(z).getX()-x)<=150 && Math.abs(towers.get(z).getY()-y)<=150){
				returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
				hasMoved=true;
				}	
		}}
		
		if (hasMoved==false){
			for (int z = 0; z<buildings.size(); z++){
				if (hasMoved==false && buildings.get(z).isEnemy==false && Math.abs(buildings.get(z).getX()-x)<=150 && Math.abs(buildings.get(z).getY()-y)<=150){
				returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
				hasMoved=true;
				}
				}
			}
		if (hasMoved==false){	
	returnSquare.mockMove(460,780);
		}
}
else if (order==3){
	if (hasMoved==false){
		for (int z = 0; z<squares.size(); z++){
			if (hasMoved==false && squares.get(z).isEnemy==true && Math.abs(squares.get(z).getX()-x)<=100 && Math.abs(squares.get(z).getY()-y)<=100){
				returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
				hasMoved=true;
				}		
			}}
	if (hasMoved==false){
		for (int z = 0; z<CircleUnits.size(); z++){
			if (hasMoved==false && CircleUnits.get(z).isEnemy==true && Math.abs(CircleUnits.get(z).getX()-x)<=100 && Math.abs(CircleUnits.get(z).getY()-y)<=100){
				returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
				hasMoved=true;
				}		
		}}
		if (hasMoved==false){
		for (int z = 0; z<towers.size(); z++){
			if (hasMoved==false && towers.get(z).isEnemy==true && Math.abs(towers.get(z).getX()-x)<=50 && Math.abs(towers.get(z).getY()-y)<=50){
				returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
				hasMoved=true;
				}	
		}}
		if (hasMoved==false){
			for (int z = 0; z<buildings.size(); z++){
				if (hasMoved==false && buildings.get(z).isEnemy==true && Math.abs(buildings.get(z).getX()-x)<=50 && Math.abs(buildings.get(z).getY()-y)<=50){
				returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
				hasMoved=true;
				}
				}
			}
		if (hasMoved==false){
		returnSquare.setX(returnSquare.getX()+ran.nextInt(speed)-speed/2);
		returnSquare.setY(returnSquare.getY()+ran.nextInt(speed)-speed/2);
		}
}
else if (order==4){
	if (hasMoved==false){
		for (int z = 0; z<squares.size(); z++){
			if (hasMoved==false && squares.get(z).isEnemy==true && Math.abs(squares.get(z).getX()-x)<=50 && Math.abs(squares.get(z).getY()-y)<=50){
				returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
				hasMoved=true;
				}		
			}}
	if (hasMoved==false){
		for (int z = 0; z<CircleUnits.size(); z++){
			if (hasMoved==false && CircleUnits.get(z).isEnemy==true && Math.abs(CircleUnits.get(z).getX()-x)<=50 && Math.abs(CircleUnits.get(z).getY()-y)<=50){
				returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+129);	
				hasMoved=true;
				}		
		}}
	if (hasMoved==false){	
returnSquare.mockMove(main.getX(),main.getY()+120);
}	
}
}
else{
	if (order==1){	
		if (hasMoved==false){
			if (hasMoved==false){
				for (int z = 0; z<squares.size(); z++){
					if (hasMoved==false && squares.get(z).isEnemy==false && Math.abs(squares.get(z).getX()-x)<=150 && Math.abs(squares.get(z).getY()-y)<=150){
						returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
						hasMoved=true;
						}		
					}}
		if (hasMoved==false){
		for (int z = 0; z<CircleUnits.size(); z++){
			if (hasMoved==false && CircleUnits.get(z).isEnemy==false && Math.abs(CircleUnits.get(z).getX()-x)<=150 && Math.abs(CircleUnits.get(z).getY()-y)<=150){
				returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
				hasMoved=true;
				}		
		}}
		if(hasMoved==false){
			if (Math.abs(main.getX()-x)<=150 && Math.abs(main.getY()-y)<=150){
				returnSquare.mockMove(main.getX(), main.getY()+120);	
				hasMoved=true;
			}	
			}
		for (int z = 0; z<towers.size(); z++){
			if (hasMoved==false && towers.get(z).isEnemy==false && Math.abs(towers.get(z).getX()-x)<=150 && Math.abs(towers.get(z).getY()-y)<=150){
				returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
				hasMoved=true;
				}	
		}}
		if (hasMoved==false){
			for (int z = 0; z<buildings.size(); z++){
				if (hasMoved==false && buildings.get(z).isEnemy==false && Math.abs(buildings.get(z).getX()-x)<=150 && Math.abs(buildings.get(z).getY()-y)<=150){
				returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
				hasMoved=true;
				}
				}
			}
		if (hasMoved==false){	
	returnSquare.mockMove(460,780);
		}
	}
	else if (order==2){
		if (hasMoved==false){
			for (int z = 0; z<squares.size(); z++){
				if (hasMoved==false && squares.get(z).isEnemy==false && Math.abs(squares.get(z).getX()-x)<=50 && Math.abs(squares.get(z).getY()-y)<=50){
					returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
					hasMoved=true;
					}		
				}}
			if (hasMoved==false){
				for (int z = 0; z<CircleUnits.size(); z++){
					if (hasMoved==false && CircleUnits.get(z).isEnemy==false && Math.abs(CircleUnits.get(z).getX()-x)<=50 && Math.abs(CircleUnits.get(z).getY()-y)<=50){
						returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
						hasMoved=true;
						}		
				}}
			if(hasMoved==false){
				if (Math.abs(main.getX()-x)<=50 && Math.abs(main.getY()-y)<=50){
					returnSquare.mockMove(main.getX(), main.getY()+120);	
					hasMoved=true;
				}	
				}
				if (hasMoved==false){
					for (int z = 0; z<towers.size(); z++){
						if (hasMoved==false && towers.get(z).isEnemy==true && Math.abs(towers.get(z).getX()-x)<=150 && Math.abs(towers.get(z).getY()-y)<=150){
							returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
							hasMoved=true;
							}	
					}}
				if (hasMoved==false){
					for (int z = 0; z<buildings.size(); z++){
						if (hasMoved==false && buildings.get(z).isEnemy==true && Math.abs(buildings.get(z).getX()-x)<=150 && Math.abs(buildings.get(z).getY()-y)<=150){
						returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
						hasMoved=true;
						}
						}
					}
			if (hasMoved==false){	
		returnSquare.mockMove(0,0);
			}
	}
	else if (order==3){
		if (hasMoved==false){
			for (int z = 0; z<squares.size(); z++){
				if (hasMoved==false && squares.get(z).isEnemy==false && Math.abs(squares.get(z).getX()-x)<=100 && Math.abs(squares.get(z).getY()-y)<=100){
					returnSquare.mockMove(squares.get(z).getX(), squares.get(z).getY()+120);	
					hasMoved=true;
					}		
				}}
			if (hasMoved==false){
			for (int z = 0; z<CircleUnits.size(); z++){
				if (hasMoved==false && CircleUnits.get(z).isEnemy==false && Math.abs(CircleUnits.get(z).getX()-x)<=100 && Math.abs(CircleUnits.get(z).getY()-y)<=100){
					returnSquare.mockMove(CircleUnits.get(z).getX(), CircleUnits.get(z).getY()+120);	
					hasMoved=true;
					}		
			}}
			if(hasMoved==false){
				if (Math.abs(main.getX()-x)<=100 && Math.abs(main.getY()-y)<=100){
					returnSquare.mockMove(main.getX(), main.getY()+120);	
					hasMoved=true;
				}	
				}
			if (hasMoved==false){
			for (int z = 0; z<towers.size(); z++){
				if (hasMoved==false && towers.get(z).isEnemy==false && Math.abs(towers.get(z).getX()-x)<=50 && Math.abs(towers.get(z).getY()-y)<=50){
					returnSquare.mockMove(towers.get(z).getX(), towers.get(z).getY()+120);	
					hasMoved=true;
					}	
			}}
			if (hasMoved==false){
				for (int z = 0; z<buildings.size(); z++){
					if (hasMoved==false && buildings.get(z).isEnemy==false && Math.abs(buildings.get(z).getX()-x)<=50 && Math.abs(buildings.get(z).getY()-y)<=50){
					returnSquare.mockMove(buildings.get(z).getX(), buildings.get(z).getY()+120);	
					hasMoved=true;
					}
					}
				}
			if (hasMoved==false){
			x+=ran.nextInt(speed)-speed/2;
			y+=ran.nextInt(speed)-speed/2;
			}
	}
}
return returnSquare;
}
}
